// 引入全局数据和工具方法
const app = getApp();
const globalData = require('../../common/globalData');
const utils = require('../../common/utils');

Page({
    data: {
        currentDate: '',       // 今日日期
        currentWeek: '',       // 今日星期
        hasCheckedIn: false,   // 是否已签到
        todayPoints: 0,        // 今日获得K币
        todayTaskList: [],     // 今日任务列表
        completedCount: 0,     // 已完成任务数
        showAuthButton: false,  // 是否显示完善信息按钮
        needLogin: false,
        // 补充任务相关状态
        showCustomTaskModal: false,
        showTaskLibraryModal: false,
        customTask: { name: '', points: '', desc: '' },
        customTaskError: '',
        taskLibraryList: [
            { libraryId: 1, name: '每日运动', points: 10, desc: '运动30分钟' },
            { libraryId: 2, name: '学习英语', points: 8, desc: '背20个单词' }
        ]
    },

    // 页面加载时初始化
    onLoad() {
        this.checkLogin(); // 登录校验
        // 1. 初始化日期
        const today = new Date();
        this.setData({
            currentDate: utils.formatDate(today),
            currentWeek: utils.formatWeek(today)
        });

        // 2. 初始化今日任务（筛选出今天的任务）
        this.initTodayTasks();

        // 3. 检查是否已签到（这里用本地存储模拟，实际可对接后端）
        const checkInRecord = wx.getStorageSync('checkInRecord') || {};
        const todayStr = utils.formatDate(today);
        if (checkInRecord[todayStr]) {
            this.setData({ hasCheckedIn: true, todayPoints: 5 });
        }

        // 4. 检查用户信息（是否需要显示完善信息按钮）
        this.checkUserInfo();
        // 同步自定义TabBar选中态（今日任务是索引0）
        if (typeof this.getTabBar === 'function' && this.getTabBar()) {
            this.getTabBar().setData({ current: 0 });
        }
    },

    // 初始化今日任务（从全局数据筛选）
    initTodayTasks() {
        const { taskList } = globalData;
        // 这里简化：默认所有任务都是今日任务，实际可根据任务的“日期字段”筛选
        const todayTasks = taskList;
        // 计算已完成任务数
        const completedCount = todayTasks.filter(task => task.status === '已完成').length;
        // 计算今日K币（签到5K币 + 已完成任务K币）
        const taskPoints = todayTasks.reduce((total, task) => {
            return task.status === '已完成' ? total + task.points : total;
        }, 0);
        const todayPoints = this.data.hasCheckedIn ? 5 + taskPoints : taskPoints;

        this.setData({
            todayTaskList: todayTasks,
            completedCount,
            todayPoints
        });
    },

    // 处理签到
    handleCheckIn() {
        if (!this.data.isLogin) {
            this.setData({ needLogin: true }); // 显示登录弹窗
            return;
        }

        if (this.data.hasCheckedIn) {
            wx.showToast({ title: '今日已签到，无需重复签到', icon: 'none' });
            return;
        }

        // 记录签到状态（本地存储）
        const today = new Date();
        const todayStr = utils.formatDate(today);
        const checkInRecord = wx.getStorageSync('checkInRecord') || {};
        checkInRecord[todayStr] = true;
        wx.setStorageSync('checkInRecord', checkInRecord);

        // 更新状态和今日K币
        this.setData({
            hasCheckedIn: true,
            todayPoints: this.data.todayPoints + 5
        });

        wx.showToast({ title: '签到成功，获得5 K币' });
    },

    // 处理任务完成
    handleCompleteTask(e) {
        if (!this.data.isLogin) {
            this.setData({ needLogin: true }); // 显示登录弹窗
            return;
        }
        const taskId = e.currentTarget.dataset.taskid;
        const { todayTaskList } = this.data;

        // 1. 更新任务状态（同步到全局数据）
        const updatedTaskList = todayTaskList.map(task => {
            if (task.taskId === taskId) {
                return { ...task, status: '已完成' };
            }
            return task;
        });

        // 2. 更新全局数据（确保任务管理页也能获取最新状态）
        globalData.taskList = globalData.taskList.map(task => {
            if (task.taskId === taskId) {
                return { ...task, status: '已完成' };
            }
            return task;
        });

        // 3. 重新计算已完成数和今日K币
        const completedCount = updatedTaskList.filter(task => task.status === '已完成').length;
        const taskPoints = updatedTaskList.reduce((total, task) => {
            return task.status === '已完成' ? total + task.points : total;
        }, 0);
        const todayPoints = this.data.hasCheckedIn ? 5 + taskPoints : taskPoints;

        // 4. 更新页面数据
        this.setData({
            todayTaskList: updatedTaskList,
            completedCount,
            todayPoints
        });

        wx.showToast({ title: '任务完成，获得K币' });
    },

    // 检查用户信息（是否需要显示完善信息按钮）
    checkUserInfo() {
        const { userInfo } = globalData;
        if (!userInfo.avatarUrl || userInfo.nickName === '未登录') {
            this.setData({ showAuthButton: true });
        }
    },

    // 获取用户信息（完善个人信息）
    getUserProfile() {
        const that = this;
        wx.getUserProfile({
            desc: '用于完善个人资料',
            success: (res) => {
                // 更新全局用户信息
                globalData.userInfo = {
                    avatarUrl: res.userInfo.avatarUrl,
                    nickName: res.userInfo.nickName,
                    totalPoints: globalData.userInfo.totalPoints
                };
                // 隐藏完善信息按钮
                that.setData({ showAuthButton: false });
                wx.showToast({ title: '个人信息完善成功' });
            },
            fail: () => {
                wx.showToast({ title: '获取信息失败，请稍后再试', icon: 'none' });
            }
        });
    },

    // 页面每次显示时刷新（确保从任务管理页回来后数据最新）
    onShow() {
        this.checkLogin();
        this.initTodayTasks();
        this.checkUserInfo();
    },

    // 核心：登录状态校验（控制按钮禁用+弹窗显示）
    checkLogin() {
        const isLogin = app.globalData.isLogin;
        console.log("islogin:"+isLogin);
        this.setData({ isLogin: isLogin });
        // 未登录时，禁用所有操作按钮（通过isLogin控制按钮disabled）
    },
    // 处理登录弹窗关闭
    handleCloseLoginModal() {
        this.setData({ needLogin: false });
    },
    // 登录成功后刷新页面状态
    handleLoginSuccess() {
        this.checkLogin(); // 重新校验登录状态
        this.initTodayTasks(); // 刷新任务数据（登录后可获取用户专属任务）
    },

    // ---------------------- 新增：补充任务核心方法 ----------------------
    handleShowActionSheet() {
        // 未登录则触发登录弹窗
        if (!this.data.isLogin) {
            this.setData({ needLogin: true });
            return;
        }

        // 调用微信原生 API 显示底部菜单
        wx.showActionSheet({
            itemList: ['自定义今日任务', '从任务库选择'], // 选项列表
            itemColor: '#333', // 选项文字颜色
            success: (res) => {
                // 用户点击了某个选项（res.tapIndex 为选项索引，0 开始）
                if (!res.cancel) { // 排除用户点击取消的情况
                    switch (res.tapIndex) {
                        case 0:
                            // 点击“自定义今日任务”：打开自定义任务弹窗
                            this.setData({ showCustomTaskModal: true });
                            break;
                        case 1:
                            // 点击“从任务库选择”：打开任务库弹窗
                            this.setData({ showTaskLibraryModal: true });
                            break;
                    }
                }
            },
            fail: (err) => {
                // 接口调用失败（如用户点击蒙层关闭）
                console.log('操作菜单调用失败', err.errMsg);
            }
        });
    },
    /**
     * 1. 显示“任务来源选择”ActionSheet
     */
    handleShowAddTaskSource() {
        // 未登录则触发登录弹窗
        if (!this.data.isLogin) {
            this.setData({ needLogin: true });
            return;
        }
        this.setData({ showAddTaskSource: true });
    },

    /**
     * 2. 关闭“任务来源选择”ActionSheet
     */
    handleCloseAddTaskSource() {
        this.setData({ showAddTaskSource: false });
    },

    /**
     * 3. 显示“自定义任务”弹窗
     */
    handleShowCustomTaskModal() {
        this.setData({
            showAddTaskSource: false, // 先关闭来源选择
            showCustomTaskModal: true,
            customTaskError: '' // 清空之前的错误提示
        });
    },

    /**
     * 4. 关闭“自定义任务”弹窗
     */
    handleCloseCustomTaskModal() {
        this.setData({
            showCustomTaskModal: false,
            customTask: { name: '', points: '', desc: '' } // 重置表单
        });
    },

    /**
     * 5. 自定义任务表单输入（双向绑定）
     */
    handleCustomTaskInput(e) {
        const { key } = e.currentTarget.dataset;
        const { value } = e.detail;
        this.setData({
            [`customTask.${key}`]: value
        });
    },

    /**
     * 6. 提交自定义任务（校验 + 新增到今日任务）
     */
    handleSubmitCustomTask() {
        const { name, points, desc } = this.data.customTask;
        const { todayTaskList } = this.data;
        let error = '';

        // 表单校验
        if (!name.trim()) {
            error = '请输入任务名称';
        } else if (!points.trim() || isNaN(Number(points)) || Number(points) <= 0) {
            error = '请输入有效的正整数积分';
        }

        // 校验失败：显示错误
        if (error) {
            this.setData({ customTaskError: error });
            return;
        }

        // 校验成功：生成自定义任务（taskId 用时间戳+随机数保证唯一）
        const customTaskItem = {
            taskId: `custom_${Date.now()}_${Math.floor(Math.random() * 1000)}`,
            name: name.trim(),
            points: Number(points),
            desc: desc.trim() || '无描述',
            status: '未完成' // 新增任务默认未完成
        };

        // 新增到今日任务列表
        const newTodayTaskList = [...todayTaskList, customTaskItem];
        this.setData({
            todayTaskList: newTodayTaskList,
            showCustomTaskModal: false,
            customTask: { name: '', points: '', desc: '' } // 重置表单
        });

        // 提示用户
        wx.showToast({ title: '自定义任务添加成功', icon: 'success', duration: 1500 });
    },

    /**
     * 7. 显示“任务库选择”弹窗
     */
    handleShowTaskLibraryModal() {
        this.setData({
            showAddTaskSource: false, // 先关闭来源选择
            showTaskLibraryModal: true
        });
    },

    /**
     * 8. 关闭“任务库选择”弹窗
     */
    handleCloseTaskLibraryModal() {
        this.setData({ showTaskLibraryModal: false });
    },

    /**
     * 9. 关联任务库任务（添加到今日任务）
     */
    handleLinkLibraryTask(e) {
        // 1. 获取传递的 libraryId
        const libraryId = e.currentTarget.dataset.libraryid;

        // 2. 从任务库列表中找到对应的任务（避免JSON.parse）
        const libraryTask = this.data.taskLibraryList.find(
            item => item.libraryId === libraryId
        );

        // 3. 校验任务是否存在
        if (!libraryTask) {
            wx.showToast({ title: '任务不存在', icon: 'none' });
            return;
        }

        // 4. 后续逻辑不变（判断是否已关联、添加到今日任务）
        const { todayTaskList } = this.data;
        const isAlreadyLinked = todayTaskList.some(
            item => item.libraryId === libraryTask.libraryId
        );
        if (isAlreadyLinked) {
            wx.showToast({ title: '该任务已关联到今日任务', icon: 'none' });
            return;
        }

        // 5. 添加到今日任务列表
        const linkedTaskItem = {
            taskId: `library_${libraryTask.libraryId}_${Date.now()}`,
            libraryId: libraryTask.libraryId,
            name: libraryTask.name,
            points: libraryTask.points,
            desc: libraryTask.desc,
            status: '未完成'
        };

        this.setData({
            todayTaskList: [...todayTaskList, linkedTaskItem],
            showTaskLibraryModal: false
        });

        wx.showToast({ title: '任务库任务关联成功', icon: 'success' });
    },

    // 排序函数：未完成任务在前，已完成任务在后
    sortTasks(tasks) {
        // 复制原数组避免直接修改源数据
        return [...tasks].sort((a, b) => {
            // 状态为“未完成”的优先级高于“已完成”
            if (a.status === '未完成' && b.status === '已完成') return -1;
            if (a.status === '已完成' && b.status === '未完成') return 1;
            // 状态相同则保持原顺序（或按创建时间排序，可选）
            return 0;
        });
    },

});